//常见操作符的使用
public class Main{

    //自增和自减操作符
    public static void main(String[] args) {
        int i=1;
        int b=5;
        i++;//不管前置还是后置，自增（++）或自减（--）的结果为+1或-1操作
        --i;//i++->i=2 --i->i=1
        b--;//b-- ->b=4
        i=--b;//前置--将值赋给其它变量时是先--后赋值，--b->b=3 将3赋给i,i=3,b=3
        System.out.println(i);//i=3
        b=i++;//后置++赋值给其它变量时是先赋值后++,b=i=3,i++ ->i=4
        System.out.println(b);
        System.out.println(i);
    }
    //逻辑操作符
    public static void main5(String[] args) {
        int a=10;
        int b=5;
        int c=1;
        if((a>b)&&(b>c))//两个都为真，执行if语句
            System.out.println("a>b>c");
        if(c>0||a>b)//两个表达式其中一个为真，执行if语句
            System.out.println("c>0,a>b");
        //逻辑取反，真变假，假变真
        if(a!=b)//判断a是否不等于b
        System.out.println("a!=b");//输出false
    }

    //移位操作符
    public static void main4(String[] args) {
        int a=11;//补码：00000000 00000000 00000000 00001011
        int b=-17;//原码：10000000 00000000 00000000 00010001
        //反码：11111111 11111111 11111111 11101110
        //+1:  11111111 11111111 11111111 11101111
        System.out.println(a<<1);//最左边的0舍弃，最右边补00000000 00000000 00000000 00010110
        //相当于原本有1的为乘上2，输出22
        System.out.println(a<<2);//同理最右边的两位0舍弃，右边补0，000000000 00000000 00000000 00101100
        //相当于原本有1的位上*2*2，输出44
        System.out.println(b>>1);//有符号右移，右边舍去1补1，舍去0补0： 11111111 11111111 11111111  11110111
        //取反：10000000 00000000 000000000 00001000
        //+1： 10000000 00000000 000000000 00001001（-9的原码）
        //右移在不失去有效位1的情况下，每右移一位具有除以2的效果
        System.out.println(b>>2);//补码：11111111 11111111 11111111 11111011
        //取反：10000000 00000000 000000000 00000100
        //+1:10000000 00000000 000000000 00000101（-5的原码）
        System.out.println(b>>>1);//不管符号位是1还是0，都是补0：01111111 11111111 11111111 11110111非常大的数

    }
    //位操作符
    public static void main3(String[] args) {
        int a=1;//补码：000000000 00000000 00000000 00000001
        int b=-1;//补码：11111111 11111111 11111111 11111111
        System.out.println(a&b);//对应位都是1才为1，其它为0
        //a&b的补码：000000000 00000000 00000000 00000001(1的补码）
        System.out.println(a|b);//每一只要有1就为1，其它为0，0或任何数都等于2该数本身
        //a|b的补码：11111111 11111111 11111111 11111111（-1的补码）
        System.out.println(a^b);//每位相同为0，相异为1
        //a^b的补码：11111111 11111111 11111111 111111110
        //取反：1000000000 00000000 00000000 00000001
        //+1:1000000000 00000000 00000000 00000010(2的补码）
        System.out.println(~b);//每位取反，1变成0，0变成1
        //~b的补码：000000000 00000000 00000000 00000000（0的补码）

    }

    public static void main2(String[] args){
        int a=10;int b=5;
        System.out.println(a+=b);
        System.out.println(a-=b);
        System.out.println(a*=b);
        System.out.println(a/=b);
        System.out.println(a%=b);
    }

    public static void main1(String[] args){
        int a=10;int b=5;
        System.out.printf("a+b=%d\n",a+b);
        System.out.printf("a-b=%d\n",a-b);
        System.out.printf("a*b=%d\n",a*b);
        System.out.printf("a/b=%d\n",a/b);
        System.out.println(b%a);
    }
}
